gusucode.com > VC++视频目标检测演示帧间差分法-源码程序 > VC++视频目标检测演示帧间差分法-源码程序/code/Video Demo/ColorTrans.cpp
//Download by http://www.NewXing.com #include "stdafx.h" #include "ColorTrans.h" ColorTrans::ColorTrans(void) { } ColorTrans::~ColorTrans(void) { } //8bit ->> 24bit unsigned char* ColorTrans::gray2RGB2(unsigned char* gray, unsigned char* rgb, int width, int height) { int acc=0; if(rgb == NULL){ rgb = (unsigned char*)malloc(sizeof(unsigned char) * width * height * 3); } for(int i = 0; i< height*width ;i++){ rgb[acc] = gray[i]; rgb[acc+1] = gray[i]; rgb[acc+2] = gray[i]; acc += 3; } return rgb; } //RGB彩色转换为RGB灰度,直接输出 //输出位8位灰度 bool ColorTrans::RGB2Gray8(unsigned char* rgb, unsigned char* gray, int width, int height) { int k = 0; for(int i = 0; i< height*width ;i++){ unsigned char newValue = (unsigned char)((long)((double)rgb[k+2])*0.299 + (long)((double)rgb[k+1])*0.587 + (long)((double)rgb[k])*0.114); gray[i] = newValue; k=k+3; } return true; } unsigned char* ColorTrans::RGB2Gray(unsigned char* gray, unsigned char* rgb, int width, int height) { int acc=0; if(gray == NULL){ rgb = (unsigned char*)malloc(sizeof(unsigned char) * width * height); } for(int i = 0; i< height*width ;i++){ gray[i] =rgb[i*3]; } return gray; } /* void ColorTrans::RGBToGray(unsigned char* dib, int width, int height) { BYTE* bitmap = dib; int hHeight = width; int hWidth = height; int k=0; unsigned char newValue=0; for(int i = 0;i<hHeight;i++){ for(int j=0; j <hWidth;j++){ //直接设置 newValue = (unsigned char)((long)((double)bitmap[k+2])*0.299 + (long)((double)bitmap[k+1])*0.587 + (long)((double)bitmap[k])*0.114); bitmap[k] = newValue; bitmap[k+1] = newValue; bitmap[k+2] = newValue; //dib->SetPixelMatrix(i,j,newValue,newValue,newValue); k=k+3; } } } */